package modelo.mapa;

public class Sur extends Borde
{
    public Sur(Ubicacion unaUbicacion)
    {
        super();
        this.asignaParaQueDireccionSeDebeAumentarODisminuirDiagonal(unaUbicacion);
    }
    
    @Override
    public Ubicacion actualizarCoordenadasMovimientoRecto(Ubicacion unaUbicacion) 
    {
    	return (new Ubicacion(unaUbicacion.obtenerCoordenadaX() - 1,unaUbicacion.obtenerCoordenadaY()));
    }    
    
    @Override
    public Ubicacion actualizarCoordenadasMovimientoDiagonal(Ubicacion unaUbicacion) 
    {
    	this.contadorParaCambiarDireccionEnDiagonal++;
    	if  (this.verificarSiSeDebeCambiarDireccionEnDiagonal())
    	{
    		if (this.direccionParaAumentarODisminuirCoordDiagonalSegunUbicacionOrigen == este)
    		{
        		return (new Ubicacion(unaUbicacion.obtenerCoordenadaX()-1,unaUbicacion.obtenerCoordenadaY()+1));
    		}
    		else
    		{
    			if (this.direccionParaAumentarODisminuirCoordDiagonalSegunUbicacionOrigen == oeste)
    			{
            		return (new Ubicacion(unaUbicacion.obtenerCoordenadaX()-1,unaUbicacion.obtenerCoordenadaY()-1));
    			}
    		}
    	}
    	else
    	{
			return (new Ubicacion(unaUbicacion.obtenerCoordenadaX()-1,unaUbicacion.obtenerCoordenadaY()));
    	}
		return unaUbicacion;        	
    }

    @Override
    public Ubicacion actualizarCoordenadasMovimientoZigZag(Ubicacion unaUbicacion)
    {
        if (this.deboAumentarCoordZigZag)
        {
            this.deboAumentarCoordZigZag = false;
            return (new Ubicacion(unaUbicacion.obtenerCoordenadaX() -1,unaUbicacion.obtenerCoordenadaY()+1));
        }
        else
        {
            this.deboAumentarCoordZigZag = true;
            return (new Ubicacion(unaUbicacion.obtenerCoordenadaX() -1,unaUbicacion.obtenerCoordenadaY()-1));
        }
    }
    
    @Override
	protected void asignaParaQueDireccionSeDebeAumentarODisminuirDiagonal(Ubicacion ubicacionOrigen) 
	{
		int distanciaHastaBordeEste = (Mapa.getInstance().obtenerCantidadColumnas() - 1 - ubicacionOrigen.obtenerCoordenadaY());
		if (ubicacionOrigen.obtenerCoordenadaY() < distanciaHastaBordeEste )
		{
			this.direccionParaAumentarODisminuirCoordDiagonalSegunUbicacionOrigen = este;
		}
		else
		{
			this.direccionParaAumentarODisminuirCoordDiagonalSegunUbicacionOrigen = oeste;
		}		
	}
}